#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<assert.h>
using namespace std;

// void Print(sigset_t &pending)
// {
//     cout<<"Pending bitmap: ";
//     for (int signub = 31; signub > 0; signub--)
//     {
//         if (sigismember(&pending, signub))
//         {
//             std::cout << "1";
//         }
//         else
//         {
//             std::cout << "0";
//         }
//     }
//     std::cout << std::endl;
// }

// void sigcb(int signo)
// {
//     cout<<"signal:"<<signo<<endl;
//     sigset_t pending;
//     sigemptyset(&pending);
//     while(1)
//     {
//         sigpending(&pending);
//         Print(pending);
//         sleep(1);
//     }
// }
// int main()
// {
//     struct sigaction act,oact;
//     act.sa_handler = sigcb;
//     act.sa_flags = 0;
//     sigemptyset(&act.sa_mask);
//     sigaction(2,&act,&oact);
//     while(true)
//     {
//         sleep(1);
//     }    
//     return 0;
// }
// #include <stdio.h>
// #include <signal.h>
// volatile int flag = 0;
// void handler(int signo)
// {
//     cout<<"change flag:"<<flag;
//     flag = 1;
//     cout<<"->"<<flag<<endl;
// }
// int main()
// {
//     signal(2, handler);
//     while(!flag);
//     printf("process quit normal\n");
//     return 0;
// }


void handler(int sig)
{
    cout<<"sig:"<<sig<<endl;
}

int main()
{
    signal(2,handler);
    signal(40,handler);

    sigset_t block;
    sigemptyset(&block);
    sigaddset(&block,2);
    sigaddset(&block,40);
    int n = sigprocmask(SIG_BLOCK,&block,nullptr);

    assert(n==0);
    cout<<"block 2 signal success"<<"pid:"<<getpid()<<endl;
    
    while(1)
    {
        cout<<"i am main "<<endl;
        sleep(1);
    }

    return 0;
}